/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SessionBeans;

import entity.Factura;
import entity.InstanciaServicio;
import entity.Linea;
import entity.Servicio;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

/**
 *
 * @author javier
 */
@Stateless
public class FacturaFacade extends AbstractFacade<Factura> {
    @PersistenceContext(unitName = "Agencia_de_Turismo_ASPU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public FacturaFacade() {
        super(Factura.class);
    }
    
    public List<Factura> obtenerFacturasXServicio (Servicio servicio, Date fechaInicio, Date fechaFin){
        TypedQuery<Factura> q = em.createQuery("SELECT factura "
                                             + "FROM Factura factura IN (factura.InstanciaServicio) iS "
                                             + "WHERE (factura.fechaEmision BETWEEN :fechaInicio AND :fechaFin) "
                                             + "AND iS.id = :id", Factura.class);
        q.setParameter("fechaInicio", fechaInicio);
        q.setParameter("fechaFin", fechaFin);
        q.setParameter("id", servicio.getId());
        List<Factura> listaFacturas = q.getResultList();
        List<Factura> resultados = null;
        for(Iterator<Factura> itFactura = listaFacturas.iterator();itFactura.hasNext();){
            Factura fac = itFactura.next();
            for (Iterator<InstanciaServicio> itInstancia = fac.getLineas().iterator(); itInstancia.hasNext();){
                InstanciaServicio instanciaServicio = itInstancia.next();
                if(instanciaServicio.getId() != servicio.getId()){
                    fac.getLineas().remove(instanciaServicio);
                }
            }
            if (fac.getLineas() != null){
                resultados.add(fac);
            }
        }
        return listaFacturas;
    }
    
    public boolean contieneInstanciaDeServicio(String id, Servicio servicio){
        for(Iterator<InstanciaServicio> it = this.find(id).getLineas().iterator();it.hasNext();){
            if(it.next().getServicio().equals(servicio)){
                return true;
            }
        }
        return false;
    }
}
